CFLAGS=   # -g, -O3 , ... par exemple
LDFLAGS=-ll -ly # les bibliotheques necessaires
CC=gcc

all: rubic

lex.yy.c: scanner.l
	lex $<
y.tab.c: parse.y
	yacc -d $<
y.tab.o: y.tab.c y.tab.h
	$(CC) $(CFLAGS) -c $<
lex.yy.o: lex.yy.c
	$(CC) $(CFLAGS) -c $<
rubic: tablesymb.o ll.o ht.o tabsym.o y.tab.o lex.yy.o tabfun.o llvm.o
	$(CC) -o $@ $^ $(LDFLAGS)

# LLVM
llvm.o: ll.h tablesymb.h llvm.h llvm.c

# Data structures

tablesymb.o: tablesymb.c

tabsym.o: ll.h tabsym.c

tabfun.o: ll.h ht.h tabfun.c

ll.o: ll.h ll.c

ht.o: ll.h ht.h ht.c

# C-tests

ll_test.o: ll_test.c

ll_test: ll.o ll_test.o

ht_test.o: ht_test.c

ht_test: ll.o ht.o ht_test.o

tests: ll_test ht_test

run_tests: tests
	./ll_test
	./ht_test

# Misc

clean:
	rm *.o y.tab.c y.tab.h ll.h.gch ll_test ht_test lex.yy.c rubic *.ghc *.ll *.s *.bc
